package com.cskaoyan.javase.homework.day09.stage3_demo.entity;

/**
 * @description: 该类对象用来存放学生对象数组, 并且完成该数组的增删改查
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 本类的作用是什么?
 * 存放学生对象数组,并且管理学生数组
 *
 * 该类中应该有什么成员变量/方法?
 * 成员变量: 学生数组
 * 成员方法: 打印数组,增删改查数组
 *
 *
 *
 */
public class StudentList {

    //成员变量count,用来指示当前数组中有效的学生对象个数
    private int count = 0;

    //属性
    private Student[] studs;

    public StudentList(int stuNum) {
        this.studs = new Student[stuNum];
    }

    //不写或者私有化
    private StudentList() {
    }

    //增,往数组里面添加新元素,是把原先null位置的元素变为一个学生对象的引用
    public boolean createStudent(Student s) {
        //判断第一个null位置,然后赋值即可
        for (int i = 0; i < studs.length; i++) {
            if (studs[i] == null) {
                studs[i] = s;
                count++;
                return true;
            }
        }
        return false;
    }

    //删
    //改
    //查


    //打印
    //打印数组内容,并且要跳过null的元素

    /**
     * 该方法是用来打印数组内容的,目的是为了跳过null元素
     * 真正打印的方法,不建议写在这里
     *
     */
    public Student[] getArrayExcludeNullElement() {
        //打印数组,先排除长度为0和为null的数组,返回长度为0的数组
        if (studs == null || studs.length == 0) return new Student[0];

        //定义要返回的新数组
        Student[] results = new Student[count];
        int start = 0; //表示新数组的下标
        //程序运行到这里,都是正常的数组
        //遍历数组,并且做筛选
        for (int i = 0; i < studs.length; i++) {
            //筛选,把null元素排除
            if (studs[i] == null) {
                continue;
            }
            //程序执行到这里,元素一定不是null,开始给新数组元素赋值
            results[start] = studs[i];
            start++;
        }
        return results;
    }


    //对学号进行校验，返回一个布尔类型的取值，true表示学号可以使用
    //false表示学号已重复禁止使用
    public boolean judgeStuIdLegal(int targetStuId) {
        //遍历studs数组，但是要注意数组中是null的元素
        for (int i = 0; i < studs.length; i++) {
            if (studs[i] == null) {
                continue;
            }
            if (studs[i].getStuId() == targetStuId) {
                //表示学号已重复
                return false;
            }
        }
        //只要不从if中结束方法，说明学号还未重复
        return true;
    }
}
